package gov.pr.celepar.sentinela.admin.action;

import gov.pr.celepar.sentinela.admin.dao.ParametrosConfigDAO;
import gov.pr.celepar.sentinela.admin.dao.factory.DAOFactoryServer;
import gov.pr.celepar.sentinela.admin.form.ParametrosForm;
import gov.pr.celepar.sentinela.admin.pojo.ParametrosConfig;
import gov.pr.celepar.sentinela.util.Criptografia;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class ParametrosAction extends BaseAction {
	private ParametrosConfigDAO parametrosB = null;

	public String executar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		ParametrosForm parametrosForm = (ParametrosForm) form;

		DAOFactoryServer daoFactory = DAOFactoryServer.getDAOFactory();
		this.parametrosB = daoFactory.getParametrosDAO();

		if (this.CONF_ALTERAR.equalsIgnoreCase(parametrosForm.getAcao())) {
			this.comunicacao.autorizaOperacao('A', request, response);
			if (parametrosForm.getConfirmacaoSenhaMailOrigem().equals(parametrosForm.getSenhaMailOrigem())) {
				alterar(parametrosForm, request);
				form.reset(mapping, request);
				String msg = this.getResources(request).getMessage("sucesso.funcao.parametros.atualizar");
				this.addMessageSucess(msg, request);
			} 
			else{
				form.reset(mapping, request);
				String msg = this.getResources(request).getMessage("erro.funcao.parametros.atualizar");
				this.addMessageSucess(msg, request);
			}
		}
		consultar(parametrosForm, request);
		parametrosForm.setConfirmacaoSenhaMailOrigem(parametrosForm.getSenhaMailOrigem());
		return "parametros";
	}

	private void alterar(ParametrosForm form, HttpServletRequest request) throws Exception {
		ParametrosConfig param = new ParametrosConfig();
		param.setCodSistemaSentinela(Long.decode(form.getCodSistemaSentinela()));
		param.setAmbiente(form.getAmbiente());
		param.setGerarSenhaAleatoria(form.isGerarSenhaAleatoria());
		param.setMaximoSenhasErradas(Integer.decode(form.getMaximoSenhasErradas()));
		param.setSenhaPadrao(form.getSenhaPadrao());
		param.setTelefoneCentralAtendimento(form.getTelefoneCentralAtendimento());
		param.setTempoBloqueioInatividade(Integer.decode(form.getTempoBloqueioInatividade()));
		param.setTempoExpiracaoSenha(Integer.decode(form.getTempoExpiracaoSenha()));

		param.setMensagemCadastroUsuario(form.getMensagemCadastroUsuario());
		param.setMensagemTrocaSenha(form.getMensagemTrocaSenha());
		param.setMailServer(form.getMailServer());
		param.setMailOrigem(form.getMailOrigem());
		
		param.setSenhaMailOrigem(Criptografia.criptografarBase(form.getSenhaMailOrigem()));
		param.setMailAssunto(form.getMailAssunto());

		param.setMensagemSeloSentinela(form.getMensagemSeloSentinela());
		param.setUrlSeloSentinela(form.getUrlSeloSentinela());

		param.setGrupoRaiz(Long.decode(form.getGrupoRaiz()));
		try {
			this.parametrosB.atualizarParametros(param);
		} catch (Exception e) {
			this.addMessageException(e, request);
		}
	}

	private void consultar(ParametrosForm form, HttpServletRequest request) {
		try {
			ParametrosConfig param = this.parametrosB.getParametros();
			form.setCodSistemaSentinela(Long.toString(param.getCodSistemaSentinela()));
			form.setAmbiente(param.getAmbiente());
			form.setGerarSenhaAleatoria(param.getGerarSenhaAleatoria());
			form.setMaximoSenhasErradas(Integer.toString(param.getMaximoSenhasErradas()));
			form.setSenhaPadrao(param.getSenhaPadrao());
			form.setTelefoneCentralAtendimento(param.getTelefoneCentralAtendimento());
			form.setTempoBloqueioInatividade(Integer.toString(param.getTempoBloqueioInatividade()));
			form.setTempoExpiracaoSenha(Integer.toString(param.getTempoExpiracaoSenha()));

			form.setMensagemCadastroUsuario(param.getMensagemCadastroUsuario());
			form.setMensagemTrocaSenha(param.getMensagemTrocaSenha());
			form.setMailServer(param.getMailServer());
			form.setMailOrigem(param.getMailOrigem());
			form.setSenhaMailOrigem(param.getSenhaMailOrigem());
			form.setMailAssunto(param.getMailAssunto());

			form.setMensagemSeloSentinela(param.getMensagemSeloSentinela());
			form.setUrlSeloSentinela(param.getUrlSeloSentinela());

			form.setGrupoRaiz(Long.toString(param.getGrupoRaiz()));
		} catch (Exception e) {
			this.addMessageException(e, request);
		}
	}
}